// UVa129 Krypton Factor
// 陈锋
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int N, L;
// s[st1...] == s[st2...], size = len
bool rangeEqual(const string& s, int st1, int st2, int len) {
  return equal(s.begin() + st1, s.begin() + st1 + len, s.begin() + st2);
}

bool dfs(int& k, string& cur, string& ans) {
  if (!cur.empty() && ++k == N) {
    ans = cur;
    return true;
  }
  for (char ch = 'A'; ch < 'A' + L; ch++)
    if (cur.empty() || cur.back() != ch) {
      cur += ch;
      int sz = cur.size(), valid = 1;
      for (int l = 2; l <= sz / 2; l++) {
        if (rangeEqual(cur, sz - l, sz - l * 2, l)) {
          valid = 0;
          break;
        }
      }
      if (valid && dfs(k, cur, ans)) return true;
      cur.pop_back();
    }
  return false;
}

int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  while (cin >> N >> L && N && L) {
    string cur, ans;
    int k = 0;
    dfs(k, cur, ans);
    for (size_t i = 0; i < ans.size(); i++) {
      cout << ans[i];
      if (i == 63 || i == ans.size() - 1) cout << endl;
      else if (i % 4 == 3) cout << " ";
    }
    cout << ans.size() << endl;
  }
  return 0;
}
/*
算法分析请参考: 《入门经典-第2版》例题 7-5
注意对字符串子串进行比较可以使用STL中的equal函数避免手写循环
*/
// 19341887 129 Krypton Factor  Accepted  C++11 0.000 2017-05-09 14:26:37
